package service

import (
	"gitee.com/ysl729895/go-mall/internal/model"
	"gitee.com/ysl729895/go-mall/internal/repository"
)

// RolePermissionService 角色-权限业务逻辑接口，定义角色分配权限、查询角色权限等操作
// 便于 controller 层调用，实现解耦
type RolePermissionService interface {
	// AssignPermissionToRole 给角色分配权限
	AssignPermissionToRole(roleID, permissionID uint) error
	// RemovePermissionsFromRole 移除角色所有权限
	RemovePermissionsFromRole(roleID uint) error
	// GetPermissionsByRoleID 查询角色所有权限
	GetPermissionsByRoleID(roleID uint) ([]model.Permission, error)
}

// rolePermissionService 角色-权限业务逻辑实现结构体
// 依赖 RolePermissionRepository

type rolePermissionService struct {
	repo repository.RolePermissionRepository
}

// NewRolePermissionService 构造函数，注入 RolePermissionRepository
func NewRolePermissionService(repo repository.RolePermissionRepository) RolePermissionService {
	return &rolePermissionService{repo: repo}
}

// AssignPermissionToRole 给角色分配权限
func (s *rolePermissionService) AssignPermissionToRole(roleID, permissionID uint) error {
	rolePermission := &model.RolePermission{RoleID: roleID, PermissionID: permissionID}
	return s.repo.Create(rolePermission)
}

// RemovePermissionsFromRole 移除角色所有权限
func (s *rolePermissionService) RemovePermissionsFromRole(roleID uint) error {
	return s.repo.DeleteByRoleID(roleID)
}

// GetPermissionsByRoleID 查询角色所有权限
func (s *rolePermissionService) GetPermissionsByRoleID(roleID uint) ([]model.Permission, error) {
	return s.repo.GetPermissionsByRoleID(roleID)
}
